"user strict"

//新建一个Promise
let p = new Promise(function(resolve, reject) {
    setTimeout(function() {
        console.log("执行完成Promise 1");
        resolve("要返回的数据可以任何数据例如接口返回数据");
    }, 2000)
})

let PClick = () => {
    console.log("方法被调用");
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            console.log("执行完成Promise 2");
            resolve("要返回的数据可以任何数据例如接口返回数据");
        }, 2000)
    })
    return p;
}


// PromiseClick().then(function(data) {
//         console.log(data);
//})
//明天问老胡
// PromiseClick()
//     .then(function(data) {
//         console.log(data);
//         return runAsync();
//     })
//     .then(function(data) {
//         console.log(data);
//         return runAsync();
//     })
//     .then(function(data) {
//         console.log(data);
//     })
//reject的用法
function PromiseClick() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 20); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 2000)
    })
    return p;
}

PromiseClick().then(function(data) {
        console.log("resolve成功回调");
        console.log("回调接收的值：" + data);
    })
    //catch的用法是抛出异常，使程序不会报错
    .catch(function(date, data) {
        console.log("catch到reject回调失败");
        console.log("catch失败执行回调抛出失败原因:", date);
    })



//all的用法和race的用法
function PromiseClick4() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("PromiseClick4()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 2000)
    })
    return p;
}

function PromiseClick5() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("PromiseClick5()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 2000)
    })
    return p;
}

function PromiseClick6() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("PromiseClick6()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 4000)
    })
    return p;
}
//all的用法
Promise.all([PromiseClick4(), PromiseClick5(), PromiseClick6()]) //会生成一个数组
    .then(function(result) {
        console.log(result);
    })








function PromiseClick1() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("2sPromiseClick1()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 2000)
    })
    return p;
}

function PromiseClick2() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("3sPromiseClick2()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 2000)
    })
    return p;
}

function PromiseClick3() {
    let p = new Promise(function(resolve, reject) {
        setTimeout(function() {
            var num = Math.ceil(Math.random() * 10); //生成1-20之间的随机数
            var num1 = parseInt(Math.random() * 2) //用内置函数parseInt生成0-1之间的随机数
            console.log("生成随机数:" + num1);
            console.log("4sPromiseClick3()随机生成数字：" + num);
            if (num <= 10) {
                resolve(num);
            } else {
                reject("数字大于10即将执行失败回调");
            }
        }, 4000)
    })
    return p;
}
//race的用法
Promise.race([PromiseClick1(), PromiseClick2(), PromiseClick3()])
    .then(function(date) {
        console.log("成功：" + date);
    }, function(err) {
        console.log("失败：" + err);
    })